/*!
 * \file IExpFactory.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief 表达式工厂接口定义
 * \details 定义了表达式计算工厂的核心接口，提供K线数据和趋势数据的表达式计算功能
 */
#pragma once
#include "WTSMarcos.h"

NS_WTP_BEGIN
class WTSKlineData;
class WTSExpressParams;
class WTSExpressData;
class WTSHisTrendData;

/**
 * @class IExpFactory
 * @brief 表达式工厂接口
 * @details 表达式计算工厂的核心接口，负责处理各种数据的表达式计算操作。
 *          主要功能包括：
 *          - 基于K线数据计算表达式
 *          - 基于历史趋势数据计算表达式
 *          - 支持自定义表达式参数
 *          
 *          该接口为量化策略提供技术指标和自定义表达式的计算服务，
 *          支持各种技术分析指标的动态计算和组合。表达式可以是
 *          简单的技术指标（如MA、RSI等），也可以是复杂的自定义公式。
 */
class IExpFactory
{
public:
	/**
	 * @brief 计算K线数据表达式
	 * @details 基于K线数据和指定的表达式名称及参数，计算相应的表达式结果。
	 *          支持各种技术指标的计算，如移动平均线、相对强弱指数、布林带等。
	 * 
	 * @param expName 表达式名称，如"MA"、"RSI"、"BOLL"等技术指标名称
	 * @param klineData K线数据指针，包含开高低收成交量等信息
	 * @param params 表达式参数指针，包含计算所需的参数设置
	 * @return WTSExpressData* 计算结果数据指针，失败返回nullptr
	 * 
	 * @note 返回的指针需要调用方负责释放内存
	 * @note 表达式名称应与系统支持的指标名称匹配
	 */
	virtual WTSExpressData *calcKlineExpress(const char* expName, WTSKlineData* klineData, WTSExpressParams* params) = 0;
	
	/**
	 * @brief 计算趋势数据表达式
	 * @details 基于历史趋势数据和指定的表达式名称及参数，计算相应的表达式结果。
	 *          适用于基于历史价格趋势的技术分析指标计算。
	 * 
	 * @param expName 表达式名称，如趋势类技术指标名称
	 * @param trendData 历史趋势数据指针，包含价格变化趋势信息
	 * @param params 表达式参数指针，包含计算所需的参数设置
	 * @return WTSExpressData* 计算结果数据指针，失败返回nullptr
	 * 
	 * @note 返回的指针需要调用方负责释放内存
	 * @note 趋势数据通常用于计算动量指标、趋势强度等
	 */
	virtual WTSExpressData *calcTrendExpress(const char* expName, WTSHisTrendData* trendData, WTSExpressParams* params) = 0;
};
NS_WTP_END